home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
games
/
spassion
/
source.lzh
/
SOURCE
/
BGSCR.C
< prev
next >
Wrap
Text File
|
2000-03-25
|
7KB
|
194 lines
/*
* 地形処理ルーチン
*/
#include <stdio.h>
#include <iocslib.h>
#include <doslib.h>
#include <io.h>
#include "SPASSION.H"
#include "BG.H"
#include "SUB.H"
unsigned short bg_map1[32 * 32 * 6];
unsigned short bg_map2[32 * 32 * 6];
unsigned short bg_map3[32 * 32 * 6];
unsigned short bg_map4[32 * 32 * 6];
/* BGごとの当たり判定
* 0:なし
* 1:破壊不可
* 2:破壊可
*/
char bg_hit1[256]={
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F*/
0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0, 0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1, 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
char bg_hit2[256]={
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F*/
0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1, 1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
char bg_hit3[256]={
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F*/
0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0, 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
char bg_hit4[256]={
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F*/
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
char *bg_hit[STAGES]={
bg_hit1,bg_hit2,bg_hit3,bg_hit4
};
/******************************
マップデータ読み込み
******************************/
int LoadMapFile (char *fname, void *ptr, int size, int n)
{
FILE *fp;
int i;
void game_end( void );
if ((fp = fopen (fname, "rb")) == NULL) {
static char e[256];
error_level = ERROR_FILE;
error_message = e;
sprintf(e, "\nファイル %s が読み込めません\n"
"強制終了します。\n"
, fname);
game_end();
}
/* .mapファイルは最初の方にマップの情報(大きさ等)が入っているので飛ばす */
fseek(fp, 30, 0);
i = fread(ptr, size, n, fp);
fclose (fp);
map_width=32*6;map_height=64; /* 今回は固定 */
return (i); /* 返り値は読み込みバイト数 */
}
/*********************************************************
全画面BGを書く。
注意)画面の消えている時に使用のこと
*********************************************************/
void SetBG( short st_x, short st_y )
{
short x,y;
for(y=0;y<33;y++){
for(x=0;x<32;x++){
BGTEXTST(1,(st_x+x)&63,(st_y+y)&63,GetBG(st_x+x,st_y+y));
}
}
BGSCRLST( 1,(st_x*8)&0x1FF,(st_y*8)&0x1FF );
}
/*::::::::::::::: 画面スクロール*/
void ScrollBG( void )
{
void t_roll(short zz);
if( map_vx>0 )
t_roll(2);
else if( map_vx<0 )
t_roll(1);
if( map_vy>0 )
t_roll(3);
else if( map_vy<0 )
t_roll(0);
/* BGSCRLST( 1,(map_x>>16)&0x1FF,(map_y>>16)&0x1FF );*/
}
/*********************************************************
現在の位置(map_x,map_y)からzzの方向のBGを書く。
map_x,map_y が参照されます
zz:向き
*********************************************************/
void t_roll(short zz)
{
short i,x,y;
x=(map_x>>16)/8;
y=(map_y>>16)/8;
switch (zz){
case(2):/*みぎ*/
for(i=31;i>=0;i--){
BGTEXTST(1,(x+32)&63,(y+i)&63,GetBG(x+32,y+i));
/* BGTEXTST(1,(x+33)&63,(y+i)&63,GetBG(x+33,y+i));*/
}
break;
case(1):/*ひだり*/
for(i=31;i>=0;i--){
/* BGTEXTST(1,(x+62)&63,(y+i)&63,GetBG(x-2,y+i));*/
BGTEXTST(1,(x+63)&63,(y+i)&63,GetBG(x-1,y+i));
}
case(3):/*うえ*/
for(i=31;i>=0;i--){
BGTEXTST(1,(x+i)&63,(y+62)&63,GetBG(x+i,y-2));
BGTEXTST(1,(x+i)&63,(y+63)&63,GetBG(x+i,y-1)); /*一応、次のも書いておく*/
}
break;
case(0):/*した*/
for(i=31;i>=0;i--){
BGTEXTST(1,(x+i)&63,(y+32)&63,GetBG(x+i,y+32));
BGTEXTST(1,(x+i)&63,(y+33)&63,GetBG(x+i,y+33));
}
break;
}
/* ここでは、向き別に分けてみました。スクロールする方向の
! まだ見えていない1行32個を書いています
*/
}
/*********************************************************
指定座標のBGを返す
[戻り値] bgのデータ
*********************************************************/
unsigned short GetBG(short x, short y)
{
if ( x<0 || y<0 || x>=map_width || y>=map_height ){
/* 座標が、マップデータ外を指定していたら 「まっくろ」なBGを返す*/
return( 0x100 );
}
return( bg_map[stage][x+y*map_width] );
/* このように座標によってbgを返す関数を作っておくと便利*/
}
/*
* 地形の当たり判定をみる
*/
char CheckBGHit(short x,short y)
{
unsigned char i;
i=bg_map[stage][(x+(map_x>>16))/8+y/8*map_width]&0xFF;
/*スプライトの座標をBGの座標に変換しそこのBG
! ナンバーを見てます
*/
return (bg_hit[stage][i]);
}
/*
* BGに書かれているキャラクターを空白にする
*/
void BreakBG( short x, short y )
{
short xx=(x+(map_x>>16))/8,yy=y/8;
bg_map[stage][xx+yy*map_width] = 0x100;
BGTEXTST( 1, xx&63, yy, 0x100 );
}